package island.gotenyama.wand.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.util.Assert;

/**
 * 伝達を表すクラス
 *
 * @author tk
 */
public class Conveyance implements Serializable {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * メッセージキーが指定されていないことを示すエラーメッセージ
	 */
	public static final String ERROR_MSG = "No Message.";

	/**
	 * Message Key
	 */
	private final List<MessageKey> messageKeyList;

	/**
	 * メッセージ(null可)
	 */
	private final String message;

	/**
	 * コンストラクタ
	 *
	 * @param messageKey メッセージキー
	 */
	public Conveyance(final MessageKey messageKey) {
		this(messageKey, null);
	}

	/**
	 * コンストラクタ
	 *
	 * @param messageKey メッセージキー
	 * @param message メッセージ
	 */
	public Conveyance(final MessageKey messageKey, final String message) {
		Assert.notNull(messageKey, ERROR_MSG);
		List<MessageKey> tmpList = new ArrayList<MessageKey>(1);
		tmpList.add(messageKey);
		messageKeyList = Collections.unmodifiableList(tmpList);
		this.message = message;
	}

	/**
	 * コンストラクタ
	 *
	 * @param messageKeyList メッセージキーリスト
	 */
	public Conveyance(final List<MessageKey> messageKeyList) {
		this(messageKeyList, null);
	}

	/**
	 * コンストラクタ
	 *
	 * @param messageKeyList メッセージキーリスト
	 * @param message メッセージ
	 */
	public Conveyance(final List<MessageKey> messageKeyList, final String message) {
		Assert.notEmpty(messageKeyList, ERROR_MSG);
		this.messageKeyList = Collections.unmodifiableList(messageKeyList);
		this.message = message;
	}

	/**
	 * メッセージキーリストを取得する。
	 *
	 * @return メッセージキーリスト
	 */
	public List<MessageKey> getMessageKeyList() {
		return messageKeyList;
	}

	/**
	 * メッセージを取得する。
	 *
	 * @return メッセージ
	 */
	public String getMessage() {
		return this.message;
	}
}